package com.zofer.study.funinterface;

/**
 * 函数接口编程 概念：有且只有一个抽象方法的接口。(可以同时有默认方法、静态方法...)
 * 函数式接口练习自定义函数式接口(无参无返回值)
 */
public class FuntionInterfaceTest01 {

    @FunctionalInterface//告诉编译器：下面的接口是函数式接口
    interface IA{
        public void show();
    }

    static class Zi implements IA{
        public void show(){
            System.out.println("子类--show()....");
        }
    }

    public static void main(String[] args) {
        //1.方式一：子类对象
        fun(new Zi());
        //2.方式二：匿名内部类
        fun(new IA(){
            public void show(){
                System.out.println("匿名内部子类--show()....");
            }
        });
        //3.方式三：Lambda表达式--
        fun(()->{//使用"无名的方法"代替了子类的show()
            System.out.println("Lambda表达式--show()");
        });
    }

    private static void fun(IA a) {
        a.show();//new Zi().show()//匿名子类.show()
    }

}
